package com.powernode.mybatis.mapper;

import com.powernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;

public interface CarMapper {
    /**
     * 获取Car的总记录条数
     * @return
     */
    Long getTotal();

    /**
     * 查询所有Car，但启用了驼峰命名自动映射机制
     * @return
     */
    List<Car> selectByMapUnderscoreToCamelCase();

    /**
     * 查询所有的Car，但是底层会使用resultMap标签进行结果映射
     * @return
     */
    List<Car> selectAllByResultMap();

    /**
     * 查询所有的Car，返回一个大Map集合
     * Map集合的key是每条记录的主键值
     * Map集合的value是每条记录
     * {
     *      35={car_num=222, id=35, guide_price=3.10, produce_time=2000-10-10, brand=凯美瑞222, car_type=新能源},
     *      36={car_num=1111, id=36, guide_price=2.30, produce_time=2001-10-10, brand=比亚迪, car_type=新能源},
     *      37={car_num=9991, id=37, guide_price=30.00, produce_time=2020-11-11, brand=凯美瑞, car_type=燃油车},
     *      38={car_num=9991, id=38, guide_price=30.00, produce_time=2020-11-11, brand=凯美瑞, car_type=燃油车}
     * }
     * @return
     */
    @MapKey("id") // 将查询结果的id值作为大map集合的key
    Map<Long,Map<String,Object>> selectAllReturnMap();

    /**
     * 查询所有Car,返回一个存放map集合的list
     * @return
     */
    List<Map<String,Object>> selectAllReturnListMap();

    /**
     * 根据id获取汽车信息，放入map集合中
     * key为查询的字段名，value为字段值
     * key                    value
     * ----------------------------
     * id                      53
     * car_num                 1111
     * ...
     * @param id
     * @return
     */
    Map<String,Object> selectByIdReturnMap(Long id);

    /**
     * 根据品牌进行模糊查询
     * @param brand
     * @return
     */
    List<Car> selectByBrandLike(String brand);

    /**
     * 查询所有Car信息
     * @return
     */
    List<Car> selectAll();

    /**
     * 根据id查询Car信息
     * @param id
     * @return
     */
    Car selectById(Long id);
}
